#import <iostream>
#import <string>
#import <vector>

using namespace std;

#import "GGraphe.h"
#import "GArete.h"

template <class G, class S, class A>
	 class GGraphe;
template <class G, class S, class A>
	class GArete;
	
template <class G, class S, class A>
	class GSommet
{
private :
	G *graphe;
	vector<A* > *listeAretes;
	string nom;

public:
	GSommet(string, G*);
	virtual ~GSommet();
	virtual void deleteSommet();
	
	virtual string getNom();
	virtual string toString()=0;
	virtual string toStringComplet();
	
	virtual G * getGraphe();
	
	virtual void addArete(A *);
	virtual void removeArete(A *);
	virtual A * getArete(int);
	
	virtual S * self()=0;

};
